よくある質問
- 序章
- Flutter は何を提供しますか?
- テクノロジー
- Flutter はどのようなテクノロジーで構築されていますか?
- Flutter は Android 上でコードをどのように実行しますか?
- Flutter は iOS 上でコードをどのように実行しますか?
- Flutter はオペレーティング システムの組み込みプラットフォーム ウィジェットを使用しますか?
- モバイル OS が更新され、新しいウィジェットが導入されるとどうなりますか?
- モバイル OS がアップデートされ、新しいプラットフォーム機能が導入されるとどうなりますか?
- Flutter アプリの構築にはどのオペレーティング システムを使用できますか?
- Flutter は何語で書かれていますか?
- Flutter はなぜ Dart を使用することにしたのですか?
- Flutter は任意の Dart コードを実行できますか?
- Flutter エンジンの大きさはどれくらいですか?
- Flutter はピクセルをどのように定義しますか?
- 能力
- どのようなアプリのパフォーマンスが期待できますか?
- どのような開発者サイクルが予想されますか?編集してから更新するまでの時間はどれくらいですか?
- ホットリロードはホットリスタートとどう違うのですか?
- Flutter アプリはどこにデプロイできますか?
- Flutter はどのようなデバイスと OS のバージョンで動作しますか?
- FlutterはWeb上で動作しますか?
- Flutter を使用してデスクトップ アプリを構築できますか?
- 既存のネイティブ アプリ内で Flutter を使用できますか?
- センサーやローカル ストレージなどのプラットフォーム サービスや API にアクセスできますか?
- バンドルされたウィジェットを拡張およびカスタマイズできますか?
- iOS と Android 間でレイアウト コードを共有する必要があるのはなぜですか?
- モバイル プラットフォームのデフォルトのプログラミング言語と相互運用できますか?
- Flutter には反射/ミラー システムが付属していますか?
- Flutter で国際化 (i18n)、ローカリゼーション (l10n)、アクセシビリティ (a11y) を行うにはどうすればよいですか?
- Flutter 用の並列アプリや同時アプリを作成するにはどうすればよいですか?
- Flutter アプリのバックグラウンドで Dart コードを実行できますか?
- Flutter で JSON/XML/プロトバッファ (など) を使用できますか?
- Flutter を使用して 3D (OpenGL) アプリを構築できますか?
- APK または IPA が非常に大きいのはなぜですか?
- Flutter アプリは Chromebook で実行できますか?
- Flutter ABI には互換性がありますか?
- フレームワーク
- 計画
序章
このページでは、よくある質問をまとめています。 ときめき。以下もチェックしてみてください 専門的な FAQ:
flutterとは何ですか?
Flutter は、美しいものを作成するための Google のポータブル UI ツールキットです。 ネイティブにコンパイルされたモバイル、Web、アプリケーション用のアプリケーション 単一のコードベースからのデスクトップとデスクトップ。 Flutterは既存のコードで動作しますが、 周辺の開発者や組織によって使用されています 無料でオープンソースです。
Flutter は誰のためのものですか?
ユーザーにとって、Flutter は美しいアプリを実現します。
開発者にとって、Flutter はアプリ構築のハードルを下げます。 アプリ開発をスピードアップし、コストと複雑さを軽減します。 プラットフォーム全体でのアプリ制作の
Flutter はデザイナーにとって、次のキャンバスを提供します。 ハイエンドのユーザーエクスペリエンス。ファストカンパニーの説明 羽ばたいてこの10年間でトップクラスのデザインアイデアの1つために コンセプトを製品コードに変える能力 典型的なフレームワークによって課される妥協はありません。 また、生産的なプロトタイピング ツールとしても機能します。 とコードペンあなたのアイデアを他の人と共有するためのサポート。
エンジニアリングマネージャーと企業にとって、 Flutter を使用するとアプリを統合できます 開発者をひとつにモバイル、ウェブ、 とデスクトップアプリチーム、ブランドの建物 単一のコードベースから複数のプラットフォーム用のアプリを作成します。 Flutter は機能の開発と同期を高速化します 顧客ベース全体にわたるリリース スケジュール。
Flutterを使用するにはどれくらいの開発経験が必要ですか?
Flutter は、慣れ親しんだプログラマーにとって親しみやすいものです。 オブジェクト指向の概念 (クラス、メソッド、変数、 など) および命令型プログラミングの概念 (ループ、 条件文など)。
私たちはプログラミングをほとんど知らない人を見てきました。 プロトタイピングに Flutter を学び、使用する経験を積む そしてアプリ開発。
Flutter ではどのような種類のアプリを構築できますか?
Flutter は、実行されるモバイル アプリをサポートするように設計されています。 Android と iOS の両方、およびインタラクティブなアプリで Web ページまたはデスクトップ上で実行したいもの。
高度にブランド化されたデザインを提供する必要があるアプリ 特に Flutter に適しています。 ただし、ピクセル完璧なエクスペリエンスを作成することもできます。 Flutter を使用して Android および iOS のデザイン言語と一致します。
flutterズパッケージエコシステム幅広くサポートします さまざまなハードウェア (カメラ、GPS、ネットワーク、 およびストレージ)およびサービス(支払い、クラウドなど) ストレージ、認証、および広告)。
Flutter を作ったのは誰ですか?
Flutter はオープンソース プロジェクトであり、 Google などからの貢献により 企業も個人も。
Flutter を使用するのは誰ですか?
Google 内外の開発者が使用 Flutter で美しいネイティブ コンパイルを構築する iOS および Android 用のアプリ。いくつかについて学ぶには これらのアプリについては、ショーケース。
Flutter のユニークな点は何ですか?
Flutter は他のほとんどのオプションとは異なります モバイルアプリに依存しないため、モバイルアプリの構築に最適 Webブラウザテクノロジーやウィジェットのセットについて 各デバイスに同梱されています。代わりに、Flutter は 独自の高性能レンダリング エンジンを使用してウィジェットを描画します。
さらに、Flutter は次の点だけが異なります。 C/C++ コードの薄い層があります。 flutterの実装 そのシステムのほとんど (合成、ジェスチャ、アニメーション、 フレームワーク、ウィジェットなど)ダーツ(現代の、 簡潔なオブジェクト指向言語) が開発者に提供されます。 読み取り、変更、置換、または削除を簡単に行うことができます。 これにより、開発者はシステムを大幅に制御できるようになり、 親しみやすさのハードルを大幅に下げるだけでなく、 システムの大部分に適用されます。
次の本番アプリは Flutter を使用して構築する必要がありますか?
flutter12018 年 12 月 4 日に発売されました。 flutter22021 年 3 月 3 日、および flutter 32023 年 5 月 10 日。 2023年5月現在、終了100万アプリは以下を使用して出荷されています 何億ものデバイスに flutterします。 いくつかのサンプル アプリをチェックしてください。ショーケース。
Flutter はほぼ四半期ごとにアップデートを配信します 安定性とパフォーマンスを向上させるケイデンス ユーザーからよく要求される機能に対応します。
Flutter は何を提供しますか?
Flutter SDK には何が入っていますか?
flutterには次のものが含まれます。
- 高度に最適化されたモバイルファーストの 2D レンダリング エンジン テキストの優れたサポート付き
- 最新の反応スタイルのフレームワーク
- マテリアル デザインと iOS スタイルを実装した豊富なウィジェット セット
- 単体テストおよび統合テスト用の API
- システムおよびサードパーティ SDK に接続するための相互運用 API およびプラグイン API
- Windows、Linux、Mac でテストを実行するためのヘッドレス テスト ランナー
- Flutter開発ツール(Dart DevTools とも呼ばれます) アプリのテスト、デバッグ、プロファイリング用
- 作成、構築、テスト、および実行のためのコマンドライン ツール アプリをコンパイルする
Flutter はエディタや IDE で動作しますか?
プラグインを提供していますVSコード、Androidスタジオ、 とインテリJアイデア。 見るエディタの設定セットアップの詳細については、 とVSコードとAndroid Studio/IntelliJプラグインの使用方法に関するヒントについては、
あるいは、flutter
指図
端末から、もう 1 つ
サポートする多くのエディターのうちダーツの編集。
Flutterにはフレームワークが付属していますか?
はい! Flutter には、最新の React スタイルのフレームワークが付属しています。 Flutter のフレームワークは階層化されるように設計されており、 カスタマイズ可能 (およびオプション)。開発者は以下を選択できます フレームワークの一部のみを使用するか、置き換えることもできます。 フレームワークの上位層全体。
Flutterにはウィジェットが付属していますか?
はい! Flutter には以下のセットが同梱されています高品質なマテリアルデザインとクパチーノ (iOS スタイル) ウィジェット、レイアウト、テーマ。 もちろん、これらのウィジェットは出発点にすぎません。 Flutter は、独自の flutterを簡単に作成できるように設計されています。 ウィジェットを追加するか、既存のウィジェットをカスタマイズします。
Flutter はマテリアル デザインをサポートしていますか?
はい! Flutter チームとマテリアル チームは緊密に連携しており、 マテリアルも完全にサポートされています。詳細については、 マテリアル 2 ウィジェットとマテリアル 3 ウィジェットをチェックしてください の中にウィジェットカタログ。
Flutterにはテストフレームワークが付属していますか?
はい、Flutter はユニットと書き込み用の API を提供します。 統合テスト。詳しくはこちらFlutterを使ったテスト。
私たちは独自のテスト機能を使用して SDK をテストします。 そして私たちは私たちを測定しますテストカバレッジコミットごとに。
Flutterにはデバッグツールが付属していますか?
はい、Flutter が付属していますFlutter開発ツール(また Dart DevTools と呼ばれます)。詳細については、を参照してください。Flutterを使ったデバッグそしてそのFlutter開発ツールドキュメント。
Flutter には依存関係注入フレームワークが付属していますか?
私たちは独自のソリューションを提供するのではなく、 しかし、提供するさまざまなパッケージがあります 依存関係の注入とサービスの場所、 そのような注射可能な、それを得る、キウイ、 とリバーポッド。
テクノロジー
Flutter はどのようなテクノロジーで構築されていますか?
Flutter は C、C++、Dart、 Skia (2D レンダリング エンジン)、 とインペラ(iOS のデフォルトのレンダリング エンジン)。 これを参照してくださいアーキテクチャ図主要コンポーネントをよりよく理解するために。 階層化アーキテクチャの詳細な説明については、 Flutter の、を読んでください。アーキテクチャの概要。
Flutter は Android 上でコードをどのように実行しますか?
エンジンの C および C++ コードは Android の NDK でコンパイルされます。
Dart コード (SDK とあなたのコードの両方)
ネイティブ、ARM、および x86 に事前にコンパイルされる (AOT)
図書館。これらのライブラリは「ランナー」に含まれています
Android プロジェクト、そして全体は.apk
。
アプリを起動すると、Flutter ライブラリがロードされます。
レンダリング、入力、イベント処理など、
コンパイルされた Flutter とアプリのコードに委任されます。
これは、多くのゲーム エンジンの動作方法と似ています。
デバッグ モード中、Flutter は仮想マシン (VM) を使用します。 ステートフル ホット リロードを有効にするためにコードを実行します。 実行中のコードを変更できる機能 再コンパイルなしで。 「デバッグ」バナーが表示されます このモードで実行中のアプリの右上隅、 パフォーマンスが特徴的なものではないことを思い出してください。 完成したリリースアプリ。
Flutter は iOS 上でコードをどのように実行しますか?
エンジンの C および C++ コードは LLVM でコンパイルされます。
Dart コード (SDK とあなたのコードの両方)
これらは、ネイティブの ARM ライブラリに事前に (AOT) コンパイルされています。
そのライブラリは「ランナー」iOS プロジェクトに含まれており、
そして全体が組み込まれています.ipa
。
アプリを起動すると、Flutter ライブラリがロードされます。
レンダリング、入力またはイベント処理など、
コンパイルされた Flutter とアプリのコードに委任されます。
これは、多くのゲーム エンジンの動作方法と似ています。
デバッグ モード中、Flutter は仮想マシン (VM) を使用します。 ステートフル ホット リロードを有効にするためにコードを実行します。 に変更を加えられる機能 再コンパイルせずにコードを実行します。わかるでしょ 右上隅にある「デバッグ」バナー このモードでアプリを実行するときに、次のことを思い出させてください。 パフォーマンスは、完成したリリースのアプリの特徴ではありません。
Flutter はオペレーティング システムの組み込みプラットフォーム ウィジェットを使用しますか?
いいえ。代わりに、Flutter は一連のウィジェットを提供します。 (マテリアル デザインおよびクパチーノ (iOS スタイル) ウィジェットを含む)、 Flutter のフレームワークとエンジンによって管理およびレンダリングされます。 閲覧できるのは、Flutterのウィジェットのカタログ。
最終的にはより高品質なアプリが生まれると私たちは信じています。 組み込みのプラットフォーム ウィジェットを再利用すると、 Flutter アプリの品質とパフォーマンスは制限されるでしょう これらのウィジェットの柔軟性と品質によって異なります。
たとえば、Android にはハードコードされたセットがあります。 ジェスチャとそれらを明確にするための固定ルールの説明。 Flutter では、独自のジェスチャ認識エンジンを作成できます それは、のファーストクラスの参加者ですジェスチャーシステム。 さらに、異なる人が作成した 2 つのウィジェットは、 ジェスチャーの曖昧さをなくすために調整します。
最新のアプリデザインのトレンドは、デザイナーと ユーザーは、よりモーション豊富な UI とブランドファーストのデザインを望んでいます。 そのレベルのカスタマイズされた美しいデザインを実現するには、 Flutter は代わりにピクセルを駆動するように設計されています 組み込みウィジェットの。
同じレンダラー、フレームワーク、ウィジェットのセットを使用することで、 同じものから複数のプラットフォーム向けに公開するのが簡単です 慎重でコストのかかる計画を立てる必要がなく、コードベースを利用できる さまざまな機能セットと API 特性を調整します。
単一の言語、単一のフレームワークを使用することで、 すべてのコードに対応する単一のライブラリ セット (UIがプラットフォームごとに異なるかどうかに関係なく)、 また、アプリの開発とメンテナンスのコストを削減することも目指しています。
モバイル OS が更新され、新しいウィジェットが導入されるとどうなりますか?
Flutter チームは、新しいモバイルの採用と需要を監視しています。 iOS と Android のウィジェットを利用でき、コミュニティとの連携を目指しています 新しいウィジェットのサポートを構築します。この作品は次のような形で登場するかもしれません 下位レベルのフレームワーク機能、新しい構成可能なウィジェット、 または新しいウィジェットの実装。
Flutter の階層化アーキテクチャは、多数の機能をサポートするように設計されています。 ウィジェット ライブラリ、およびコミュニティを奨励し、サポートしています。 ウィジェット ライブラリの構築と保守。
モバイル OS がアップデートされ、新しいプラットフォーム機能が導入されるとどうなりますか?
Flutter の相互運用性とプラグイン システムは、次のことを可能にするように設計されています。 開発者が新しいモバイル OS の機能にアクセスできるようにする すぐに。開発者は Flutter チームを待つ必要はありません 新しいモバイル OS の機能を公開します。
Flutter アプリの構築にはどのオペレーティング システムを使用できますか?
Flutter は、Linux、macOS、ChromeOS、 そしてWindows。
Flutter は何語で書かれていますか?
ダーツ、急成長を遂げている最適化された現代言語 クライアントアプリ用。基礎となるグラフィックス フレームワーク Dart 仮想マシンは C/C++ で実装されています。
Flutter はなぜ Dart を使用することにしたのですか?
開発の初期段階では、 Flutter チームは多くのことを検討しました 言語とランタイム、そして最終的には フレームワークとウィジェットにはDartを採用。 Flutter は評価に 4 つの主要な次元を使用しました。 フレームワーク作成者のニーズを考慮し、 開発者とエンドユーザー。たくさんの言語を見つけました いくつかの要件を満たしていましたが、Dart は高いスコアを獲得しました すべての評価項目を満たしており、 要件と基準。
Dart ランタイムとコンパイラーは、次の組み合わせをサポートします。 Flutter の 2 つの重要な機能: JIT ベースの高速 形状の変化と 型のある言語でのステートフル ホット リロード、 加えて、効率的な出力を行う Ahead-of-Time コンパイラ 高速起動と予測可能なパフォーマンスを実現する ARM コード 本番展開。
さらに、緊密に連携する機会もあります 積極的に投資を行っている Dart コミュニティと協力して Flutter で使用できるよう Dart を改良するためのリソース。ために たとえば、Dart を導入したとき、 この言語には事前情報がありませんでした ネイティブバイナリを生成するためのツールチェーン、 これは予測可能なものを達成するのに役立ちます。 高性能ですが、Dart チームのおかげで言語も高性能になりました Flutter用に構築しました。同様に、Dart VM には 以前はスループットが最適化されていましたが、 チームは最適化されましたVM のレイテンシを最適化することで、さらに多くの Flutter のワークロードにとって重要です。
Dart は、次の主な基準で高いスコアを獲得しています。
- 開発者の生産性
- Flutter の主な価値提案の 1 つは、 開発者ができるようにすることでエンジニアリング リソースを節約します。 同じコードベースで iOS と Android の両方のアプリを作成します。 生産性の高い言語を使用すると作業が高速化されます 開発者をさらに支援し、Flutter をより魅力的にします。 これは、私たちのフレームワーク チームにとっても非常に重要でした。 私たちの開発者も同様です。 flutterの大部分 ユーザーに提供するのと同じ言語で構築されており、 したがって、10万行のコードでも生産性を維持する必要があります。 アプローチを犠牲にすることなく能力とか 開発者向けのフレームワークとウィジェットの読みやすさ。
- オブジェクト指向
- Flutter では、次のような言語が必要です。 Flutter の問題領域: 視覚的なユーザー エクスペリエンスの作成。 業界には数十年にわたる経験構築があります オブジェクト指向言語のユーザー インターフェイス フレームワーク。 非オブジェクト指向言語を使用することもできますが、 これは、いくつかの問題を解決するために車輪を再発明することを意味します。 難しい問題。さらに、開発者の大多数は オブジェクト指向開発の経験がある Flutter を使用した開発方法を簡単に学習できるようになります。
- 予測可能な高性能
- Flutter を使用することで、開発者が迅速に作成できるようにしたいと考えています。 流動的なユーザーエクスペリエンス。それを達成するには、次のことを行う必要があります。 大量のエンド開発者コードを実行できる すべてのアニメーションフレーム中に。つまり言語が必要だということです 高いパフォーマンスと予測可能性の両方を実現します パフォーマンスを維持し、定期的な一時停止が発生する可能性がありません。 ドロップされたフレーム。
- 高速割り当て
- Flutter フレームワークは、関数型のフローを使用します。 基礎となるメモリアロケータに大きく依存します 小規模で短期間の割り当てを効率的に処理します。 このスタイルは、次の言語で開発されました。 プロパティであり、言語では効率的に機能しません この機能が欠けているもの。
Flutter は任意の Dart コードを実行できますか?
Flutter は直接実行できない Dart コードを実行できます。
推移的にインポートするdart:mirrors
またdart:html
。
Flutter エンジンの大きさはどれくらいですか?
2021 年 3 月に、ダウンロード サイズを測定しました。最小限の Flutter アプリ(材料コンポーネントなし、
たった一つだけCenter
ウィジェット、で構築flutter build
apk --split-per-abi
)、リリース APK としてバンドルおよび圧縮され、
ARM32 の場合は約 4.3 MB、ARM64 の場合は約 4.8 MB になります。
ARM32 では、コア エンジンは約 3.4 MB
(圧縮)、フレームワーク + アプリ コードはおよそ
765 KB (圧縮)、LICENSE ファイルは 58 KB
(圧縮)、および必要な Java コード (classes.dex
)
は 120 KB (圧縮) です。
ARM64 では、コア エンジンは約 4.0 MB
(圧縮)、フレームワーク + アプリ コードはおよそ
659 KB (圧縮)、LICENSE ファイルは 58 KB
(圧縮)、および必要な Java コード (classes.dex
)
は 120 KB (圧縮) です。
これらの数値は以下を使用して測定されました。アプカナライザー、 それもまたAndroid Studioに組み込まれている。
iOS では、同じアプリのリリース IPA がダウンロードされます。 Apple の報告によれば、iPhone X のサイズは 10.9 MB App Store接続。 IPA は主に APK よりも大きくなります Apple は IPA 内でバイナリを暗号化するため、 圧縮効率が低下します (iOS App Store 特有の考慮事項AppleのセクションQA1795)。
もちろん、独自のアプリを測定することをお勧めします。 そのためには、を参照してください。アプリのサイズを測定する。
Flutter はピクセルをどのように定義しますか?
Flutter は論理ピクセルを使用します。
そしてそれらを単に「ピクセル」と呼ぶこともよくあります。
flutterズdevicePixelRatio
比率を表します
物理ピクセルと論理 CSS ピクセルの間。
能力
どのようなアプリのパフォーマンスが期待できますか?
優れたパフォーマンスが期待できます。 flutterは 開発者が一定の 60fps を簡単に達成できるように設計されています。 Flutter アプリはネイティブにコンパイルされたコードを使用して実行されます。いいえ 通訳が関与します。 これは、Flutter アプリが迅速に起動することを意味します。
どのような開発者サイクルが予想されますか?編集してから更新するまでの時間はどれくらいですか?
Flutter は、ホットリロード開発者サイクル。期待できます デバイスまたはエミュレータ/シミュレータでのリロード時間は 1 秒未満です。
Flutterのホットリロードはステートフルアプリの状態 リロード後も保持されます。これは、迅速に反復できることを意味します アプリを起動せずに、アプリ内に深くネストされた画面上で リロードするたびにホーム画面から。
どうですかホットリロードと違うホットリスタート?
ホットリロードは、更新されたソースコードファイルを挿入することで機能します 実行中の Dart VM (仮想マシン) に接続します。これはそうではありません 新しいクラスを追加するだけでなく、メソッドとフィールドも追加します 既存のクラスに追加し、既存の関数を変更します。 ホット リスタートにより、アプリの状態が初期状態にリセットされます。
詳細については、を参照してください。ホットリロード。
Flutter アプリはどこにデプロイできますか?
Flutter アプリをコンパイルして iOS、Android、ウェブ、 とデスクトップ。
Flutter はどのようなデバイスと OS のバージョンで動作しますか?
-
私たちはさまざまな環境で Flutter をサポートし、テスト実行しています。 ローエンドからハイエンドのプラットフォームまで。詳細なリストについては テスト対象のプラットフォームについては、を参照してください。 のリストサポートされているプラットフォーム。
-
Flutter は、事前 (AOT) コンパイル済みライブラリの構築をサポートしています ために
x86_64
、armeabi-v7a
、 とarm64-v8a
。 -
ARMv7 または ARM64 用に構築されたアプリは正常に動作します (ARM エミュレーションを使用) 多くの x86 Android デバイスで。
-
さまざまなプラットフォームでの Flutter アプリの開発をサポートします。 各項目の下にリストされているシステム要件を参照してください。開発オペレーティング システム。
FlutterはWeb上で動作しますか?
はい、Web サポートは安定したチャネルで利用できます。 詳細については、こちらをご覧ください。ウェブの説明書。
Flutter を使用してデスクトップ アプリを構築できますか?
はい、Windows のデスクトップ サポートは安定しています。 macOS、および Linux。
既存のネイティブ アプリ内で Flutter を使用できますか?
はい、詳細については、アプリに追加当社ウェブサイトのセクション。
センサーやローカル ストレージなどのプラットフォーム サービスや API にアクセスできますか?
はい。 Flutter を使用すると、開発者はすぐに利用できるようになります。いくつかのオペレーティング システムのプラットフォーム固有のサービスと API。 ただし、「最小公倍数」の問題は避けたいと考えています。 ほとんどのクロスプラットフォーム API を使用できるため、ビルドするつもりはありません すべてのネイティブ サービスと API のクロスプラットフォーム API。
多くのプラットフォーム サービスと API には、既製のパッケージpub.dev で入手可能です。 既存のパッケージの使用は簡単だ。
最後に、開発者には Flutter を使用することをお勧めします。 非同期メッセージ パッシング システムを作成して、 独自の統合プラットフォームとサードパーティ API。 開発者は、多かれ少なかれ、 必要に応じてプラットフォーム API を利用し、レイヤーを構築します プロジェクトに最適な抽象化。
バンドルされたウィジェットを拡張およびカスタマイズできますか?
絶対。 Flutterのウィジェットシステムが設計されました 簡単にカスタマイズできるように。
各ウィジェットに多数のパラメータを提供させるのではなく、
Flutter には合成が含まれます。ウィジェットはより小さなものから構築されます
新しい方法で再利用したり組み合わせたりできるウィジェット
カスタムウィジェット。たとえば、ジェネリックをサブクラス化するのではなく、
ボタンウィジェット、ElevatedButton
マテリアル ウィジェットとGestureDetector
ウィジェット。マテリアル ウィジェットはビジュアルを提供します。
デザインとGestureDetector
ウィジェットが提供するのは、
インタラクションデザイン。
カスタムのビジュアルデザインを使用してボタンを作成するには、以下を組み合わせることができます。
ビジュアルデザインを実装するウィジェットGestureDetector
、
インタラクションデザインを提供します。例えば、CupertinoButton
このアプローチに従って、GestureDetector
それを実装する他のいくつかのウィジェットと
ビジュアルデザイン。
構成により、視覚的な要素と要素を最大限に制御できます。 ウィジェットのインタラクションデザインを可能にしながら、 大量のコードが再利用されます。フレームワーク内で分解しました 複雑なウィジェットを個別に実装する部分に分割する ビジュアル、インタラクション、モーションのデザイン。リミックスできるよ これらのウィジェットを独自にカスタマイズすることもできます 表現力豊かなウィジェット。
iOS と Android 間でレイアウト コードを共有する必要があるのはなぜですか?
さまざまなアプリ レイアウトを実装することを選択できます。 iOSとアンドロイド。開発者はモバイル OS を自由にチェックできます 実行時にさまざまなレイアウトをレンダリングし、 ただし、このような慣行はまれであると考えられます。
モバイルアプリのレイアウトとデザインはますます進化しています よりブランド主導になり、プラットフォーム全体で統一されるようになります。 これは、レイアウトと UI を共有する強い動機を意味します。 iOS と Android にまたがるコード。
ブランドアイデンティティとアプリのカスタマイズ 美的デザインは現在、より重要になってきています。 従来のプラットフォームの美学を厳密に遵守しています。 たとえば、アプリのデザインではカスタム フォント、色、 形や動きなどを明確に伝えるために、 ブランドアイデンティティ。
また、共通のレイアウト パターンが複数の地域に展開されているのがわかります。 iOSとアンドロイド。たとえば、「下部のナビゲーション バー」 パターンは iOS と Android 全体で自然に見つかるようになりました。 デザインのアイデアが集約されているようです モバイルプラットフォーム全体で。
モバイル プラットフォームのデフォルトのプログラミング言語と相互運用できますか?
はい、Flutter はプラットフォームへの呼び出しをサポートしています。
Android 上の Java または Kotlin コードとの統合を含む、
iOS では ObjectiveC または Swift コード。
これは、柔軟なメッセージ パッシング スタイルによって可能になります。
Flutter アプリがメッセージを送受信できる場所
を使用してモバイル プラットフォームに接続するBasicMessageChannel
。
プラットフォームとサードパーティのサービスへのアクセスについて詳しくは、こちらをご覧ください。 flutterでプラットフォームチャネル。
ここにありますプロジェクト例の使用方法を示しています バッテリー状態情報にアクセスするためのプラットフォーム チャネル iOSとアンドロイド。
Flutter には反射/ミラー システムが付属していますか?
ダーツに含まれるものdart:mirrors
、
これは型リフレクションを提供します。しかしそれ以来
Flutter アプリは実稼働用にプリコンパイルされており、
バイナリ サイズはモバイル アプリでは常に懸念事項です。
このライブラリは Flutter アプリでは使用できません。
静的解析を使用すると、そうでないものをすべて取り除くことができます 使用されます(「木が揺れる」)。巨大なDartライブラリをインポートする場合 ただし、自己完結型の 2 行メソッドのみを使用します。 その場合は、2 行方式のコストのみを支払います。 たとえその Dart ライブラリ自体が数十のファイルをインポートしたとしても、 他にも数十のライブラリ。この保証はあくまで安全なものです Dart がコンパイル時にコード パスを識別できる場合。 これまでに、特定のニーズに対応する他のアプローチを見つけてきました コード生成など、より良いトレードオフを提供します。
Flutter で国際化 (i18n)、ローカリゼーション (l10n)、アクセシビリティ (a11y) を行うにはどうすればよいですか?
i18n と l10n の詳細については、「国際化チュートリアル。
a11y について詳しくは、アクセシビリティに関するドキュメント。
Flutter 用の並列アプリや同時アプリを作成するにはどうすればよいですか?
Flutter はアイソレーションをサポートします。アイソレートは別個のヒープです Flutter の VM、並列実行可能 (通常は別のスレッドとして実装されます)。分離物 非同期メッセージを送受信することによって通信します。
をチェックしてくださいFlutter でアイソレートを使用する例。
Flutter アプリのバックグラウンドで Dart コードを実行できますか?
はい、両方のバックグラウンド プロセスで Dart コードを実行できます。 iOSとアンドロイド。詳細については、無料の Medium 記事を参照してください。Flutter プラグインとジオフェンシングを使用してバックグラウンドで Dart を実行する。
Flutter でプロトバッファ (など) を使用するにはどうすればよいですか?
JSON/XML/を使用できますか?絶対。にライブラリがありますパブ.devJSON、XML、protobufs、 および他の多くのユーティリティと形式。
Flutter での JSON の使用に関する詳細な記事については、 をチェックしてくださいJSON チュートリアル。
Flutter を使用して 3D (OpenGL) アプリを構築できますか?
現在、OpenGL ES などを使用した 3D はサポートされていません。 私たちは、最適化された 3D API を公開する長期計画を持っています。 しかし今は 2D に重点を置いています。
APK または IPA が非常に大きいのはなぜですか?
通常、画像、サウンドファイル、フォントなどのアセットは、 APK または IPA の大部分です。中のさまざまなツール Android と iOS のエコシステムは理解に役立ちます APK または IPA の中身。
また、必ず作成してくださいリリースビルドFlutter ツールを使用して APK または IPA を変更します。 リリースビルドは通常、多くの小さい よりもデバッグビルド。
の作成について詳しくは、Android アプリのリリースビルド、 そして、iOS アプリのリリースビルド。 また、チェックしてくださいアプリのサイズを測定する。
Flutter アプリは Chromebook で実行できますか?
Flutter アプリが一部の Chromebook で実行されるのを確認しました。 私たちは追跡していますFlutter の実行に関する問題 Chromebook。
Flutter ABI には互換性がありますか?
Flutter と Dart はアプリケーション バイナリ インターフェイス (ABI) を提供しません 互換性。 ABI 互換性の提供は最新ではありません flutterまたはダーツのゴール。
フレームワーク
build() メソッドが StatefulWidget ではなく State にあるのはなぜですか?
を置くWidget build(BuildContext context)
メソッドオンState
むしろ、Widget build(BuildContext context, State state)
メソッドオンStatefulWidget
開発者がより柔軟に対応できるようになります。
サブクラス化StatefulWidget
。さらに読むことができますAPI ドキュメントに関する詳細なディスカッションState.build
。
Flutter のマークアップ言語はどこにありますか? Flutter にはマークアップ構文がないのはなぜですか?
Flutter UI は命令型のオブジェクト指向で構築されています。 言語 (Dart、Flutter の構築に使用されるのと同じ言語) フレームワーク)。 Flutter には宣言型マークアップは同梱されていません。
コードを使用して動的に構築された UI により、次のことが可能になることがわかりました。 より柔軟に。たとえば、私たちはそれが難しいと感じました 表現し生成するための厳格なマークアップ システムの場合 カスタマイズされた動作を備えたカスタマイズされたウィジェット。
また、「コードファースト」アプローチの方がより適切な処理が可能であることもわかりました。 ホットリロードや動的な環境適応などの機能。
カスタム言語を作成することも可能です。 その場でウィジェットに変換されます。なぜならビルドメソッドは 「ただのコード」なので何でもできますが、 マークアップを解釈してウィジェットに変換することも含まれます。
私のアプリには右上にデバッグ バナー/リボンがあります。なぜ私はそれを見ているのでしょうか?
デフォルトでは、flutter run
コマンドは
デバッグビルド構成。
デバッグ構成では、Dart コードを VM (仮想マシン) で実行します。 迅速な開発サイクルを可能にするホットリロード(リリース ビルドは標準のアンドロイドとiOSツールチェーン)。
デバッグ構成ではすべてのアサートもチェックされるため、
開発の早い段階でエラーを発見できますが、
ランタイムコスト。 「デバッグ」バナーは、これらのチェックが行われていることを示します。
有効になっています。これらのチェックを行わずにアプリを実行するには、
のいずれかを使用して、--profile
また--release
にフラグを立てるflutter run
。
IDE が Flutter プラグインを使用している場合、 アプリをプロファイル モードまたはリリース モードで起動できます。 VS コードの場合は、[実行] > [デバッグの開始]また実行 > デバッグなしで実行メニューエントリ。 IntelliJ の場合は、メニュー エントリを使用します。実行 > プロファイル モードでの flutter実行またリリースモード。
Flutter のフレームワークはどのようなプログラミング パラダイムを使用していますか?
Flutter はマルチパラダイム プログラミング環境です。 過去数十年にわたって開発された多くのプログラミング技術 flutterで使用されます。私たちはそれぞれを信じて使用します この技術の長所により、特に適しています。 順不同:
- 構成
- Flutter で使用される主なパラダイムは、
狭い行動範囲を持つ小さなオブジェクトが一緒に構成され、
より複雑な効果が得られます。攻撃的な構成。 Flutter ウィジェットのほとんどのウィジェット
ライブラリはこのようにして構築されます。たとえば、マテリアル
TextButton
クラスは次を使用して構築されます のIconTheme
、InkWell
、Padding
、 あるCenter
、Material
、 のAnimatedDefaultTextStyle
、そしてConstrainedBox
。 のInkWell
を使用して構築されていますGestureDetector
。 のMaterial
を使用して構築されていますAnimatedDefaultTextStyle
、 あるNotificationListener
、 とAnimatedPhysicalModel
。 等々。それはずっとウィジェットです。 - 関数型プログラミング
- アプリケーション全体は次のものだけで構築できます
StatelessWidget
s は本質的に次のような関数です。 引数が他の関数にどのようにマッピングされるかを説明し、ボトムアウトする レイアウトを計算したりグラフィックスをペイントしたりするプリミティブ内。 (このようなアプリケーションは状態を簡単に持つことができません。 したがって、通常は非対話型です。) たとえば、Icon
ウィジェットは本質的に引数をマップする関数です (color
、icon
、size
) をレイアウト プリミティブに組み込みます。 さらに、不変のデータ構造が多用されており、 全体を含めてWidget
クラス 階層だけでなく、次のような多数のサポート クラスも含まれます。Rect
とTextStyle
。より小規模な場合は、ダーツIterable
関数を多用する API スタイル (map、reduce、where など) は、処理に頻繁に使用されます。 フレームワーク内の値のリスト。 - イベント駆動型プログラミング
- ユーザーインタラクションはイベントオブジェクトによって表されます
イベント ハンドラーに登録されたコールバックにディスパッチされます。
画面の更新は、同様のコールバック メカニズムによってトリガーされます。の
Listenable
の基礎として使用されるクラス アニメーション システム、イベントのサブスクリプション モデルを形式化する 複数のリスナーがいる場合。 - クラスベースのオブジェクト指向プログラミング
- フレームワークの API のほとんどはクラスを使用して構築されています
継承付き。私たちは、次のように定義するアプローチを使用します。
基本クラスの非常に高レベルの API を特殊化します。
それらをサブクラス内で繰り返し実行します。例えば、
レンダリング オブジェクトには基本クラスがあります (
RenderObject
) それは座標系に関しては不可知論的です、 そしてサブクラスができました(RenderBox
) これは、ジオメトリに基づくべきであるという意見を紹介します。 デカルト座標系 (x/幅および y/高さ)。 - プロトタイプベースのオブジェクト指向プログラミング
- の
ScrollPhysics
クラスチェーンインスタンスを構成する 実行時に動的にスクロールに適用される物理学。 これにより、システムはページング物理などを構成できるようになります。 プラットフォーム固有の物理演算を使用し、プラットフォームを変更する必要はありません。 コンパイル時に選択されます。 - 命令型プログラミング
- 単純な命令型プログラミング (通常は) オブジェクト内にカプセル化された状態とペアになり、 最も直感的なソリューションを提供する場合に使用されます。 たとえば、テストは命令型スタイルで記述されます。 最初にテスト中の状況を説明し、次にリストします テストが一致する必要がある不変式、次に進みます テストに必要なクロックまたはイベントの挿入。
- リアクティブプログラミング
- ウィジェットと要素ツリーは次のように説明されることがあります。
ウィジェットで新しい入力が提供されるため、リアクティブです。
コンストラクターは変更としてすぐに伝播されます。
ウィジェットのビルドメソッドによる下位レベルのウィジェット、および
下部のウィジェットで行われた変更 (例:
ユーザー入力に応答して) ツリーを上に伝播します
イベントハンドラーを使用します。機能的反応性と
命令型と反応型はフレームワーク内に存在します。
ウィジェットのニーズに応じて。ビルド付きウィジェット
メソッドどのようにするかを説明する式だけで構成されます
ウィジェットは構成の変更に反応し、機能します。
リアクティブ ウィジェット (マテリアルなど)
Divider
クラス)。 ビルドメソッドが子のリストを構築するウィジェット 複数のステートメントにわたって、ウィジェットがどのように反応するかを説明します 構成の変更に対しては、必ず対応する必要があります ウィジェット (たとえば、Chip
クラス)。 - 宣言型プログラミング
- ウィジェットのビルド メソッドは多くの場合、単一です。
複数レベルのネストされたコンストラクターを含む式、
Dart の厳密に宣言的なサブセットを使用して書かれています。
このようなネストされた式は機械的に変換される可能性があります
適切に表現できるマークアップ言語との間で。
たとえば、
UserAccountsDrawerHeader
ウィジェットには長いビルド メソッド (20 行以上) があり、 単一のネストされた式で構成されます。 これを命令型スタイルと組み合わせて UI を構築することもできます。 これは、純粋な宣言型のアプローチで説明するのが難しくなります。 - 汎用プログラミング
- 型を使用すると、開発者がプログラミングを理解するのに役立ちます
早い段階でエラーが発生します。 Flutter フレームワークは汎用プログラミングを使用して、
この点に関して助けてください。たとえば、
State
クラスはその型に関してパラメータ化されます。 Dart アナライザーがキャッチできるように関連するウィジェット 状態とウィジェットの不一致。同様に、GlobalKey
クラスは型パラメータを取るので、 タイプセーフな方法でリモート ウィジェットの状態にアクセスできます (実行時チェックを使用)、Route
インターフェースは 使用することが予想される型でパラメータ化されます。ポップした、および次のようなコレクションList
さん、Map
さん、 とSet
はすべてパラメータ化されているため、不一致が生じます 要素は分析中または分析時に早期に検出できます。 デバッグ中のランタイム。 - 同時プログラミング
- Flutter が多用するのは、
Future
など 非同期 API。たとえば、アニメーション システム レポートは次のようになります。 未来を完成させることでアニメーションが終了するとき。 画像読み込みシステムも同様に先物を使用してレポートを作成します。 ロードが完了したとき。 - 制約プログラミング
- Flutter のレイアウト システムは、次の弱い形式を使用します。 シーンのジオメトリを決定するための制約プログラミング。 制約 (たとえば、デカルト ボックスの場合、最小値と 最大幅と最小および最大高さ) は親から子に渡され、子は結果を選択します。 ジオメトリ (たとえば、デカルト ボックスの場合、サイズ、 特に幅と高さ) がこれらの制約を満たすようにします。 この手法を使用することで、Flutter は通常、 1 回のパスでシーン全体をレイアウトします。
計画
どこでサポートを受けられますか?
バグに遭遇したと思われる場合は、次のメールアドレスに報告してください。問題トラッカー。また、使用することもできますスタックオーバーフロー「HOWTO」タイプの質問の場合。 ディスカッションについては、次のメーリング リストに参加してください。flutter-dev@googlegroups.comまたは、私たちを探してください不和。
詳細については、「コミュニティページ。
どうすれば参加できますか?
Flutter はオープンソースなので、貢献することをお勧めします。 機能リクエストの問題を提出するだけで始めることができます そして私たちのバグ問題トラッカー。
メーリングリストに参加することをお勧めします。flutter-dev@googlegroups.comあなたの様子を教えてください Flutter の使い方と、それを使って何をしたいか。
コードの貢献に興味がある場合は、始めてみましょう 私たちの記事を読んで貢献ガイドをチェックしてください。 のリスト簡単なスターター問題。
最後に、役立つ Flutter コミュニティとつながることができます。 詳細については、「コミュニティページ。
Flutter はオープンソースですか?
はい、Flutter はオープンソース テクノロジーです。 プロジェクトは次の場所で見つけることができますGitHub。
Flutter とその依存関係にはどのソフトウェア ライセンスが適用されますか?
Flutter には 2 つのコンポーネントが含まれています。 動的にリンクされたバイナリと、別個の Dart フレームワーク エンジンがロードするバイナリ。エンジンは複数のソフトウェアを使用します 多くの依存関係を持つコンポーネント。完全なリストを表示する その中でライセンスファイル。
このフレームワークは完全に自己完結型であり、次のものが必要です。ライセンスは 1 つだけ。
さらに、使用する Dart パッケージには、 独自のライセンス要件。
Flutter アプリケーションに表示する必要があるライセンスを確認するにはどうすればよいですか?
表示する必要があるライセンスのリストを検索する API があります。
-
アプリケーションに
Drawer
を追加しますAboutListTile
。 -
アプリケーションにドロワーがなくても、 マテリアル コンポーネント ライブラリ、いずれかを呼び出します
showAboutDialog
またshowLicensePage
。 -
よりカスタムなアプローチの場合は、次の場所から生のライセンスを取得できます。
LicenseRegistry
。
Flutter に取り組んでいるのは誰ですか?
みんなそうですよ! Flutter はオープンソース プロジェクトです。 現在、開発の大部分は完了しています Googleのエンジニアによるもの。 Flutter に興味があるなら、 コミュニティに参加することをお勧めします。Flutter に貢献する!
Flutter の基本原則は何ですか?
私たちは次のことを信じています。
- すべての潜在的なユーザーにアプローチするために、 開発者は複数のモバイル プラットフォームをターゲットにする必要があります。
- 現在存在する HTML と WebView では、 一貫して高いフレームレートを実現し、 自動動作 (スクロール、 レイアウト) と従来のサポート。
- 現在、同じアプリを複数回構築するのはコストがかかりすぎます。 異なるチーム、異なるコードベースが必要です。 さまざまなワークフロー、さまざまなツールなど。
- 開発者は、単一のコードベースを使用して、より簡単で優れた方法を望んでいます。 複数のターゲット プラットフォーム向けのモバイル アプリを構築する そして品質、制御、パフォーマンスを犠牲にしたくありません。
私たちは次の 3 つのことに重点を置いています。
- コントロール
- 開発者は、以下にアクセスし、制御する権利があります。 システムのすべての層。これは次のことにつながります。
- パフォーマンス
- ユーザーには、完璧に流動的で応答性が高く、 ジャンクフリーのアプリ。これは次のことにつながります。
- 忠実度:
- 誰もが正確、美しく、楽しいものに値する アプリのエクスペリエンス。
Apple は私の Flutter アプリを拒否しますか?
私たちは Apple のことを代弁することはできませんが、Apple の App Store には以下のものが含まれています Flutter などのフレームワーク テクノロジを使用して構築された多くのアプリ。 実際、Flutter は同じ基本的なアーキテクチャを使用しています。 多くの機能に動力を供給するエンジンである Unity としてモデル化します。 Apple Storeで最も人気のあるゲーム。
Apple は優れたデザインのアプリを頻繁に紹介してきました Flutter で構築されたものは、 含むハミルトンと反射的に。
Apple ストアに提出される他のアプリと同様に、 Flutter で構築されたアプリは Apple に従う必要がありますガイドラインApp Storeへの提出用。